第1回“Learning Spark”読書会 に参加しました
2/28(土)に行われた第1回“Learning Spark”読書会に参加してきました。当日は、大きく分けて
- 事前アンケート結果のご紹介
- ``Introduction to Data Analysis with Spark'' -Apache Sparkによるデータ分析への招待-
- ``Downloading Spark and Getting Started'' -Sparkを導入し、使ってみよう-
- 懇親会
の流れで進みました。本記事では、セッションを聞かせて頂き、私自身が注目したポイントを挙げたと思います。
※気になったポイントの羅列となるため、発表者様の発言そのものや、セッション資料(後述するslideshare上の資料)の文言そのままとなっているところが多いかと思います。予め引用させて頂いていることをお断りしておきます。
事前アンケート結果のご紹介
主催者様である@data_sciesotist様による、事前アンケートの結果についての発表でした。
- 2014、2015年にSparkを知った人が多い
- (大体)20:50位の割合で、使ったことがない人が多い(正確な数値が発表されていましたが、メモできませんでした)
とのことでした。私も今年に入ってからApache Sparkは知りましたし、実務でも使ったことはありませんので、このアンケート結果には納得できました。
``Introduction to Data Analysis with Spark'' -Apache Sparkによるデータ分析への招待-
引き続き@data_sciesotist様による、Learning Sparkの第一章についてのセッションでした。以下にセッション資料のslideshareが公開されているので、詳細はそちらを参照してください。
第1回 ``Learning Spark'' 読書会 導入 ``Learning Spark読書会について''
第1回 ``Learning Spark'' 読書会 第1章 ``Introduction to Data Analysis with Spark''
本の紹介
- Learning Spark
- Apache Sparkについての日本語の本はまだないと思う、とのこと。
- 全部で11章。
- 第一回の読書会では、1章、2章について扱う。
Sparkとは何か
- 高速・汎用の分散処理プラットフォームである。
- インタラクティブ処理やストリーム処理に対応。
- インメモリで高速な処理が可能。
- バッチ処理、反復処理、インタラクティブ処理、ストリームを組み合わせ「データ分析パイプライン」を作れることが売り。
- Python,Java,Scalaに対応。APIがあるので、自作プログラムから呼び出すことも可能。ただしPythonは7倍ほど遅い、という話も懇親会前に出た。
私個人としては、ストリーム処理や、バッチ処理でHadoopを組むほどの規模ではないが逐次実行が難しい規模の場合などにSparkは使えるのではないかと期待しています。
A Unified Stack
- Sparkは密接に関連するコンポーネントから構成される(Spark SQL、Streaming、機械学習、GraphX)。
- それらを組み合わせて使うことが出来る。
- 使用する人の役割によって、使用する機能が変わってくる。例えばアナリスト→SQLでの検索、データサイエンティスト→Pythonシェル、一般従業員→バッチ、のように。
構成要素(1)Spark Core
- スケジュール、メモリ管理、障害復旧、ストレージとのやりとりを担当。
- RDDsについて。読み込んだデータをRDDという単位で扱う。
- RDDはコレクションで、複数ノードにまたがって配置され、並列で処理される。
構成要素(2)Spark SQL
- データをSQLライクな文法を使用して検索できる。
- Hive, Parquet, JSONなどに対応。
- BI ToolからSpark SQLを呼び出して、ビックデータを検索できる。
構成要素(3)Spark Streaming
- ストリームを扱う。
- ノードが落ちた場合も自動的に復旧してくれる。
- 基本機能として耐障害性が提供されている。
構成要素(4) MLib
- 機械学習の機能を提供する。
- 分類、会期、クラスタリング、協調フィルタリング(レコメンド)のアルゴリズムを提供。
構成要素(5)GraphX
- 「グラフ」を扱うためのパッケージ
構成要素(6)クラスタ管理
- スケールアウト可能
- Spark単体でもクラスタ化が可能。
- YARN、Apache Mesosなどのクラスタマネージャ上でもクラスタ化が可能。
Data Science Tasks
- やることは、データを分析してモデル化すること。
- Spark SQL、機械学習(MLib)、Rとの組み合わせを使用。
- アドホックな分析には、Scalaシェル、Pythonシェルを使用。
Data Processing Applications
- アドホック分析からアプリケーションへの実装。
- 多くのエンジニアができる(ただし高いスキルが必要)。
Storage Layers for Spark
- ローカル,HDFS,S3,Cassandra,Hive,Hbaseなど。
``Downloading Spark and Getting Started'' -Sparkを導入し、使ってみよう-
@data_sciesotist様による、Learning Sparkの第二章の前半についてのセッションでした。以下にセッション資料のslideshareが公開されているので、詳細はそちらを参照してください。
第1回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started''
Downloading Spark(1)
- 動かしてみるだけなら、コンパイル済みバイナリをダウンロードするのがいい。
- Windowsでは「Hadoop 2.4 and later」と書かれたものは動かない(主催者様談)。
- WindowsでSparkを使う場合、スペースを含まないフォルダ名にする。
EC2へのデプロイ
- spark-ec2 というスクリプトが標準であり、EC2にデプロイできる。
- Bash+PythonなのでLinuxで動かすのが楽。
- m3.largeインスタンス5台など、クラスタリングする環境を作ることができる。
- ソースを持ってきて、上記のスクリプトを実行すると、セキュリティグループの作成〜インスタンスの作成などができる。
- デフォルトはアメリカのリージョン。オプションにてリージョン、ソーンを指定できる。指定したインスタンスタイプが無いとエラーとなる。
- 質疑応答で、destroyが上手く行かないケースがあったとの話がでました。これについては上手く行く・行かないは当たりはずれが有る。クラスタをキチンと作りたいときは、手動でインスタンスをつくる、との回答でした。
Spark Shellのデモ
- conf/log4j.propertiesに出力される情報は設定可能。
- Spark shellを立ち上げるとWeb UIも立ち上がる。 ブラウザにてlocalhost:4040にてアクセス可。
- クラスタで使う場合にも提供される。(ポートは8080番)
- クラスタを1つしか立ち上げないと、Scala Shellも一つしか立ち上がらない。
- 複数ユーザで使いたいときなどは、複数のクラスタを立ち上げる必要がある。
まとめ
私自身がApache Sparkを触り始めたばかりなので、新しく知ることも沢山あり楽しかったです。主催者の@data_sciesotist様、参加者の皆様、ありがとうございました。